package com.hancher.common.androidutil;

import android.content.Context;
import android.util.DisplayMetrics;

import com.hancher.common.base.BaseApplication;

/**
 * 作者 : Hancher ytu_shaoweijie@163.com <br/>
 * 时间 : 2021/4/2 13:46 <br/>
 * 描述 : dp px sp转换工具 <br/>
 * px 像素点 <br/>
 * dp 单位英寸像素点 <br/>
 * sp 单位英寸单位比例像素点 <br/>
 */
public class DensityUtil {
    public static void collect() {
        DisplayMetrics displayMetrics = BaseApplication.getInstance().getResources().getDisplayMetrics();
        MmkvUtil.put("DENSITY", displayMetrics.density);
        MmkvUtil.put("DENSITY", displayMetrics.xdpi);
        MmkvUtil.put("DENSITY_DPI", displayMetrics.densityDpi);
        MmkvUtil.put("WIDTH_PIXELS", displayMetrics.widthPixels);
        MmkvUtil.put("HEIGHT_PIXELS", displayMetrics.heightPixels);
    }

    /**
     * 显示器的逻辑密度。（手机屏幕像素比，0.75:1.0:1.5:2.0:3.0）
     *
     * @return
     */
    public static float getDensity() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().density;
    }

    /**
     * 以每英寸点数表示的屏幕密度。（屏幕密度，意思是每寸有多少个像素点  120(ldpi) 160(mdpi) 240(hdpi) 320(xhdpi) 480(xxhdpi)）
     *
     * @return
     */
    public static int getDensityDpi() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().densityDpi;
    }

    /**
     * 可用显示大小的绝对宽度（以像素为单位）。
     *
     * @return
     */
    public static float getWidthPixels() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().widthPixels;
    }

    /**
     * 可用显示大小的绝对高度（以像素为单位）。
     *
     * @return
     */
    public static float getHeightPixels() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().heightPixels;
    }

    /**
     * X维度中每英寸屏幕的确切物理像素。
     *
     * @return
     */
    public static float getXdpi() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().xdpi;
    }

    /**
     * 在Y维度上，屏幕每英寸的确切物理像素。
     *
     * @return
     */
    public static float getYdpi() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().ydpi;
    }

    /**
     * 显示器上显示的字体的缩放因子。
     *
     * @return
     */
    public static float getScaledDensity() {
        return BaseApplication.getInstance().getResources().getDisplayMetrics().scaledDensity;
    }

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dp2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}
